// 先用引号终结上面的代码
; (async function () {
  const express = require("express");

  const cors = require("cors");
  const todoModel = require("./db/model");
  const app = express();
  // 引入数据库连接代码
  await require("./db/db");
  console.log("数据库连接成功");

  // 解析post请求的请求体
  app.use(express.urlencoded({ extended: false }));
  // 利用cors解决跨域
  app.use(cors());

  // 1.实现添加：提交任务名添加任务到数据库
  app.post("/addTodo", async (req, res) => {
    const { todoName } = req.body;
    // 创建一个文档对象

    const obj = {
      todoName: todoName,
      // 名与值同名可以简写为todoName,
    };
    // 插入数据
    await todoModel.create(obj);
    // 查询数据库
    const todos = await todoModel.find();
    // 返回浏览器
    res.send(todos);
  });

  // 定义一个响应所有任务信息的接口(为了练习,使用jsonp)
  app.get("/getTodos", async (req, res) => {
    // 接收函数名
    const { callback } = req.query;

    // 查询插入之后的所有的数据,响应给浏览器渲染
    let todos = await todoModel.find();
    // send会自动将数组,转成json字符串
    // 注意: 本来send可以将一个js对象自动转成json字符串,但是由于我们要拼接函数调用.所以传给send方法的就是一个字符串. 字符串拼接的时候,将数组toString.导致[]丢失. 这样的数据不便于前端操作.所以需要先在服务器中,将数组,转成json字符串然后再进行拼接
    todos = JSON.stringify(todos);
    res.send(`${callback}(${todos})`); // 函数名(数据)
  });

  //修改任务的状态
  app.post("/updateTodo", async (req, res) => {
    const { id, checked } = req.body;
    // 根据传入的ID进行修改状态
    await todoModel.updateOne({ _id: id }, { $set: { isDone: checked } });
    // 再次查询数据
    const todos = await todoModel.find();
    res.send(todos);
  });
  // 删除一个任务的接口
  app.post("/deleteTodo", async (req, res) => {
    const { id } = req.body;
    // 根据传入的ID进行修改状态
    await todoModel.deleteOne({ _id: id });
    // 再次查询数据
    const todos = await todoModel.find();
    res.send(todos);
  });

  // 修改多个的状态
  app.post("/updataAllTodos", async (req, res) => {
    const { checked } = req.body;
    await todoModel.updateMany({}, { $set: { isDone: checked } });
    // 再次查询数据
    const todos = await todoModel.find();
    res.send(todos);
  });
    
// 删除所有完成的任务
    app.post('/deleteAllDoneTodos', async (req, res) => {
        await todoModel.deleteMany({ isDone: true })
        const todos = await todoModel.find();
        res.send(todos)
        
            
    })

  app.listen(5000, (err) => {
    if (err) console.log("服务器启动失败", err);
    else console.log("服务器启动ok");
  });
})()
